#pragma once
#include <mutex> //互斥量
#include <unordered_map>
using namespace std;

// 手机验证码类  饿汉单例 线程安全
class PhoneCode
{
private:
    PhoneCode();

public:
    ~PhoneCode();
    // 获取实例
    static PhoneCode *getInstance()
    {
        return globalInstance;
    }
    // 添加一个 手机号-验证码 键值对
    void add(const string &phone, const string &code);
    // 删除一个 手机号-验证码 键值对
    void remove(const string &phone);
    // 查找验证码是否与手机号匹配
    bool codeMatch(const string &phone, const string &code);
    // 生成一个随机验证码
    string generatorCode();

private:
    static PhoneCode *globalInstance; // 全局唯一实例
    unordered_map<string, string> unorder_map;
    mutex m_mutex; // 互斥量
};